import pandas as pd
import math
 
jd1='4G网管上站址对应的经度'
wd1='4G网管上站址对应的纬度'
jd2='华为诺基亚网管RRU经度'
wd2='华为诺基亚网管RRU纬度'
def haversine(lon1, lat1, lon2, lat2):
    """计算两点间球面距离（米）"""
    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
    c = 2 * math.asin(math.sqrt(a))
    return 6371000 * c  # 地球半径6371km转米

# 读取Excel，指定工作表（如果需要）
df = pd.read_excel(r'd:\荆州45G坐标勘误下钻清单大于1km（待整改）已核实20250819.xlsx')

# 打印实际的列名以确认
print("实际的列名:")
print(df.columns.tolist())

# 新增列名校验逻辑
required_columns = [jd1, wd1, jd2, wd2]
missing_cols = [col for col in required_columns if col not in df.columns]

if missing_cols:
    raise ValueError(f"缺少必要列: {missing_cols}. 请检查实际列名")

# 确保相关列是数值类型，非数值替换为NaN
# 根据实际列名进行调整
df[jd1] = pd.to_numeric(df[jd1], errors='coerce')
df[wd1] = pd.to_numeric(df[wd1], errors='coerce')
df[jd2] = pd.to_numeric(df[jd2], errors='coerce')
df[wd2] = pd.to_numeric(df[wd2], errors='coerce')  # 修正列名：维度 -> 纬度

# 计算距离（使用列名：st, xw）
distance_values = []
for idx, row in df.iterrows():
    try:
        if pd.notna(row[jd1]) and pd.notna(row[wd1]) and \
           pd.notna(row[jd2]) and pd.notna(row[wd2]):  # 修正列名：维度 -> 纬度
            distance = haversine(row[jd1], row[wd1], 
                               row[jd2], row[wd2])  # 修正列名：维度 -> 纬度
            distance_values.append(round(distance))  # 增加四舍五入取整
        else:
            distance_values.append(None)
    except Exception as e:
        print(f"行 {idx} 计算错误: {e}")
        distance_values.append(None)

# 将距离列追加到原表的最后一列
df['距离(m)'] = distance_values

# 保存结果到新的Excel文件
df.to_excel(r'd:\处理后_荆州45G坐标勘误清单.xlsx', index=False)
print("文件已保存")